/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package laboratorio2;
/**
 *
 * @author owner
 */
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author ROGER DIAZ
 */
public abstract class Lock1 implements Estructura {
    
protected int[] listado;
int largo;
boolean estado;
String tipo;
    
//constructor que hace un candado que el candado desee
public Lock1(int indice){

    largo= indice; 
    estado=false;
    listado = new int [largo];
    tipo="arbitrario";
       
}

//constructor que hace un candado por default
public Lock1(){
    largo =4; 
    listado = new int [largo]; 
    listado[0]=9;
    listado[1]=0;
    listado[2]=21;
    listado[3]=0;
    estado=false;
    tipo="default";
    
}
    
//GETTERS
    public int[] getListado() {
        return listado;
    }

    public boolean isEstado() {
        return estado;
    }

    public int getLargo() {
        return largo;
    }

    public String getTipo() {
        return tipo;
    }
    

    //SETTERS
    public void setListado(int[] listado) {
        this.listado = listado;
    }

    public void setEstado(boolean estado) {
        this.estado = estado;
    }

    public void setLargo(int largo) {
        this.largo = largo;
    }

    public void setTipo(String tipo) {
        this.tipo=tipo;
    }

public String press(int [] clave){ //Descripcion: este metodo es el mas largo ha este le ingresas una lista de tipo 
//integer en su paremetro y tiene que primero verificar si lo numeros estan en el rango de 0 a 25, luego compara si 
//es igual a clave que tiene el candado con la lista ingresada. Si es igual devolver se ha abierto el candado y de lo 
//contrario indicar que que la clave ingresada es errone y bloquer todo el candado
int r = 0;
String condicionfinal;
int numreseteo=largo;
for(int i=numreseteo; i==0; i--){
   if(listado[numreseteo-1]==clave[numreseteo-1]){
       r++;
   }
}
if(r==largo){
    condicionfinal="Su candado se ha abierto";
	estado=true;
}
else{
    condicionfinal="Su candado no se ha abierto";
	estado=false;
}
return condicionfinal;
}


public String reset(){ //Descripcion nueva: Este lo que hara dale un nuevo chance al usuario de poder ingresar 
//nuevamente la clase osea si se equivoco le da reset y podra intetar meter otravez la clave-

return "Su candado se ha inicializado, ingrese el codigo nuevamente";
}


public String isLocked(){ //Descripcion: es metodo solo indica en si esta abierto o cerrado el candado
String status;
if (estado==true)
   status="Su candado esta cerrado";
else{
    status="Su candado esta abierto)";

}
    return status;
}


public void lock(){//Descripcion: cierra el candado y luego lo resetea totalmente!
    estado=false;
    reset();  //notar que reset devuelve un string
    
}
    

public void ingresoClave(int[] claveUsuario){//Descripcion: este metodo recibe una lista de integer que es la que se guardad en la memoria del candado
int i=1;
while(i!=largo)
{
            if(claveUsuario[i-1]<=25 && claveUsuario[i-1]>=0){
            listado[i-1]= claveUsuario[i-1];
            }
            else{
                   i=largo;
                   }
 }
}
}


